#ifndef WORKERTHREAD_H
#define WORKERTHREAD_H
#include "QThread"
#include "Parser.h"
#include "Query.h"
#include "ArchivoRepositorios.h"
#include "QPushButton"
#include "QTextEdit"

class WorkerThread : public QThread{
    Q_OBJECT

    void run() Q_DECL_OVERRIDE {

        struct passwd *pw = getpwuid(getuid());
        const char *homeDir = pw->pw_dir;

        string baseDir = (string(homeDir).append("/.datos/"));

        //Si no existe el directorio lo creo
        if ( access( baseDir.c_str(), 0 ) != 0 )
            mkdir (baseDir.c_str(), 0777);

        ArchivoRepositorios* r = new ArchivoRepositorios((string(baseDir)).append("Repositorios").c_str());
        r->baseDir = baseDir;

        MainWindow* mainWindow=MainWindow::getInstance();

        string nombreIndice=mainWindow->getNombreIndice();
        string repositorio=mainWindow->getRepositorio();
        string consulta=mainWindow->getConsulta();

        //Indexacion
        if(!nombreIndice.empty() && !repositorio.empty()){
            if (r->add(nombreIndice)) {
                Parser* parser=new Parser(repositorio);
                delete(parser);
            } else {
                MainWindow::getInstance()->writeToStdOuT("Ya existe un indice con ese nombre.");
            }
        }

        //Consultas
        if(!nombreIndice.empty() && !consulta.empty()){
            if (r->isIndice(nombreIndice)) {
                Archivo::indexDir = (string(baseDir).append(nombreIndice).append("/"));
                Query::getInstance()->setTerminos(consulta);
            } else {
                MainWindow::getInstance()->writeToStdOuT("No existe un indice con ese nombre.");
            }

        }

        delete(r);
        emit resultReady();
    }

signals:
    void resultReady();
public slots:
    void onFinished(){
        MainWindow* mainWindow=MainWindow::getInstance();
        QPushButton *ejecutarButton = mainWindow->findChild<QPushButton*>("ejecutarButton");
        ejecutarButton->setEnabled(true);
        Query::destroyInstance();
        mainWindow->cleanInputVariables();
    }
};
#endif // WORKERTHREAD_H
